// 1.安装mongoose
// npm i mongoose
// 2.导入mongoose
const mongoose = require('mongoose');
// 3.链接mangodb服务(创建bilibli数据库)
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');// mongodb协议://ip地址:端口号/数据库名称

// 4.设置回调 once 事件回调只执行一次
// 链接成功的回调函数
mongoose.connection.once('open', () => {
    // 5.创建文档的结构对象
    // 设置集合中文档的属性和属性值的类型
    let bookSchema = new mongoose.Schema({
        name: {
            type: String,
            required: true,//表示该属性不能为空(必填项)
            unique: true//将name属性设置为独一无二的(不会再添加相同的name文档属性)
        },
        author: {
            type: String,
            default: "匿名"//给作者设置匿名值
        },
        author_sex: {
            type: String,
            enum: ["男", "女"]//枚举形
        },
        price: Number,
        is_hot: Boolean,
        tags: Array,
        save_time: Date,
        test: mongoose.Schema.Types.Mixed//任意类型数据
    });
    // 6.创建模型对象,对文档操作的封装对象(用来完成文档的增删查改的操作，books--集合)
    let bookModel = mongoose.model('books', bookSchema);

    //7.设置字段

    // select方法: 字段名: 1 || 0  ————  1-需要查找的，0-不需要查找的
    // sort方法:   字段名: 1 || 0  ————  1-升序，-1-降序
    // skip方法:    number  ————  数字是多少就跨过几条信息
    // limit方法:   number  ————  数字是多少就查找多少条信息
    bookModel.find().select({price: 1, name: 1,_id:0}).sort({price:1}).skip(2).limit(3).exec((err, data) => {
        if (err) {
            console.log('读取失败~');
            return;
        }
        console.log('读取成功~\n' + data)
    });
});
//链接错误的回调函数
mongoose.connection.on('error', () => {
    console.log('连接失败~')
});
//链接关闭的回调函数
mongoose.connection.on('close', () => {
    console.log('连接关闭~')
});
//2秒后关闭链接
setTimeout(() => {
    mongoose.disconnect();
}, 2000);